/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model.fabrica;

import br.uerj.jms.banco.PublishBanco;
import br.uerj.jms.banco.SubscriberBanco;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.jms.JMSException;
import javax.naming.NamingException;

/**
 *
 * @author Felipe Ribeiro
 */
public class FabricaDeConexao {

    /**
     * Variáveis necessárias para estabelecer a conexão
     */
    private static final String usuario = "postgres";
    private static final String senha = "12345";
    private static final String url = "jdbc:postgresql://localhost:5432/meubancodedados";

    private FabricaDeConexao() {

    }

    /**
     * Método que estabelece a conexão com o banco de dados PostgreSQL chamado
     * projeto
     *
     * @return conexão estabelecida
     */
    private static Connection abrir() throws Exception {

        Connection conn = null;
        try {
            conn = (Connection) DriverManager.getConnection(url, usuario, senha);
        } catch (Exception ex) {
            System.err.print(ex.getMessage());
            throw ex;
        }
        return conn;
    }

    /**
     * Método que executa a pesquisa no banco de dados e prepara o resultado
     *
     * @param conteudo
     * @throws NamingException
     * @throws JMSException
     * @throws Exception
     */
    public static void consulta(String conteudo) throws NamingException, JMSException, Exception {

        String query = "select * from produtos2 where name like '%" + conteudo + "%'";

        Connection con = FabricaDeConexao.abrir();
        Statement stmt = null;

        String buffer = "";
        try {
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            ResultSetMetaData rsmd = rs.getMetaData();
            int numberOfColumns = rsmd.getColumnCount();
            while (rs.next()) {
                for (int i = 1; i <= numberOfColumns; i++) {
                    if (i != 1) {
                        buffer += ",";
                    }
                    buffer += rsmd.getColumnName(i) + ":";
                    buffer += rs.getString(i);
                }
                buffer += "\n";
            }

            System.out.println(buffer.length());
            if (buffer.length() < 1) {
                buffer = "Nenhum registro foi encontrado";
            }
            PublishBanco.start(buffer);

        } catch (SQLException e) {
            e.printStackTrace();
            System.err.print(e.getMessage());
        } finally {
            if (stmt != null) {
                stmt.close();
            }
            con.close();
        }
        SubscriberBanco.receberMensagem();
    }
}
